home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / graphics / font3d10.zip / Geometry.H < prev    next >
C/C++ Source or Header  |  1994-09-15  |  3KB  |  107 lines

  1. //=================================================================================================
  2. //   Geometry.H
  3. //
  4. //   Copyright (c) 1994 by Todd A. Prater
  5. //   All rights reserved.
  6. //
  7. //=================================================================================================
  8.  
  9. #ifndef __Geometry_H__
  10. #define __Geometry_H__
  11.  
  12.    #include <iostream.h>
  13.    #include "Config.H"
  14.    #include "Vector.H"
  15.    #include "List.H"
  16.  
  17.    //---------------------------------------------------------------------------
  18.    //    TRIANGLE
  19.    //---------------------------------------------------------------------------
  20.  
  21.    class TRIANGLE
  22.    {
  23.       public:  VECTOR v1,v2,v3;
  24.                VECTOR n1,n2,n3;
  25.  
  26.                TRIANGLE(void);
  27.                TRIANGLE(VECTOR _v1, VECTOR _v2, VECTOR _v3);
  28.                TRIANGLE(VECTOR _v1, VECTOR _v2, VECTOR _v3,
  29.                         VECTOR _n1, VECTOR _n2, VECTOR _n3);
  30.                TRIANGLE(TRIANGLE& t);
  31.  
  32.                VECTOR Normal(void) { return ~((v3-v1)^(v2-v1)); }
  33.  
  34.                void Output(ostream& s, ULONG format);
  35.  
  36.                BYTE    Orientation(void)
  37.                {
  38.                   if (((v2.x-v1.x)*(v3.y-v1.y)
  39.                       -(v3.x-v1.x)*(v2.y-v1.y)) >= 0.0)
  40.                      return COUNTER_CLOCKWISE;
  41.                   else
  42.                      return CLOCKWISE;
  43.                }
  44.    };
  45.  
  46.  
  47.    inline TRIANGLE::TRIANGLE(void)
  48.    {
  49.    }
  50.  
  51.    inline TRIANGLE::TRIANGLE(VECTOR _v1, VECTOR _v2, VECTOR _v3)
  52.    {
  53.       v1=_v1; v2=_v2; v3=_v3;
  54.    }
  55.  
  56.    inline TRIANGLE::TRIANGLE(VECTOR _v1, VECTOR _v2, VECTOR _v3,
  57.                              VECTOR _n1, VECTOR _n2, VECTOR _n3)
  58.    {
  59.       v1=_v1; v2=_v2; v3=_v3;
  60.       n1=_n1; n2=_n2; n3=_n3;
  61.    }
  62.  
  63.    inline TRIANGLE::TRIANGLE(TRIANGLE& t)
  64.    {
  65.       v1=t.v1; v2=t.v2; v3=t.v3;
  66.    }
  67.  
  68.    ostream& operator << (ostream& s, const TRIANGLE& t);
  69.  
  70.  
  71.  
  72.  
  73.    class POLYGON
  74.    {
  75.        public:
  76.            int              numpoints;
  77.            VECTOR*          pointlist;
  78.            ORIENTATIONTYPE  orientation;
  79.  
  80.            ORIENTATIONTYPE  findOrientation(void);
  81.            ORIENTATIONTYPE  findDeterminant(INT p1, INT p2, INT p3);
  82.            BOOLEAN          noneInside(INT p1, INT p2, INT p3, INT n, INT* vlist);
  83.  
  84.  
  85.  
  86.            POLYGON(void);
  87.            POLYGON(INT n, VECTOR* p);
  88.            POLYGON(POLYGON& P);
  89.  
  90.            INT NumPoints(void) { return numpoints; }
  91.            INT Triangulate(LIST<TRIANGLE>& trianglelist);
  92.            int Encloses(POLYGON& p);
  93.            int isInside(POLYGON& p);
  94.            void Combine(POLYGON& p);
  95.            void Shrink(POLYGON& p, DOUBLE shrinkFactor);
  96.            void SetDepth(DOUBLE d);
  97.  
  98.    };
  99.  
  100.    ostream& operator << (ostream& s, const POLYGON& p);
  101.  
  102.    VECTOR ApproximateQuadraticSpline(VECTOR cp1, VECTOR cp2, VECTOR cp3, DOUBLE t);
  103.  
  104.  
  105. #endif
  106.  
  107.